/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sc.utilidades.banco;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Calendar;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author r
 */
public class BancoFirebird extends BancoAbstrato {

    // MÉTODOS CONSTRUTORES
    
    
    
    // MÉTODOS ACESSORES
    @Override
    public ResultSet selectDado(String select) {
        conectar();
        
        ResultSet resultado = null;
        Statement st = createStatement();
        try {
            resultado = st.executeQuery(select);
        } catch (SQLException ex) {
            Logger.getLogger(BancoFirebird.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        return resultado;
    }
    
    @Override
    public ResultSet selectDado(String tabela,int id) {
               conectar();
        
        ResultSet resultado = null;
        Statement st = createStatement();
        try {
            resultado = st.executeQuery("SELECT * FROM "+tabela+" WHERE ID="+id);
        } catch (SQLException ex) {
            Logger.getLogger(BancoFirebird.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        return resultado;
        
    }
  
    
    // MÉTODOS MODIFICADORES

    
    
    // MÉTODOS UTILITÁRIOS
    @Override
    public boolean conectar() {
        boolean conectado = false;
        // INICIO INSTRUÇÕES DE CONEXÃO COM O BANCO
        try{
            Class.forName("org.firebirdsql.jdbc.FBDriver");
            conexao = DriverManager.getConnection("jdbc:firebirdsql:localhost:C:\\scti\\firebird\\ACADEMIA.FDB", "SYSDBA", "masterkey");
            System.out.println("Conectado!");
            conectado = true;
           
        }catch (Exception e) {
            System.out.println("Erro >>> "+e.getMessage());
            System.out.println("nao conectado!");
        }
        
        // FIM INSTRUÇÕES DE CONEXÃO COM O BANCO
        
        return conectado;
        
    }

    @Override
    public boolean desconectar() {
        boolean desconectado;
        
        // INICIO INSTRUÇÕES DE DESCONEXÃO COM O BANCO
        try {
            if(!conexao.isClosed()){
                conexao.close();
            }
            System.out.println("Desconectado!");
            desconectado=true;
        } catch (Exception e) {
            desconectado=false;
        }
      
        // FIM INSTRUÇÕES DE DESCONEXÃO COM O BANCO
        return desconectado;
    }

    @Override
    public Statement createStatement(){
        java.sql.Statement stmt;
        try {
            stmt = conexao.createStatement();
        } catch (SQLException ex) {
            Logger.getLogger(BancoFirebird.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
        return stmt;
    }
    
    @Override
    public boolean execute(String exec){
        conectar();
        
        java.sql.Statement stmt = createStatement();
        try {
            stmt.execute(exec);
        } catch (SQLException ex) {
            Logger.getLogger(BancoFirebird.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("ERROR: BancoFirebird.execute()");
            return false;
        }finally{
            desconectar();
        }    
        
        return true;
    }

    @Override
    public boolean deleteDado(String tabela, int dado) {
        if(true){
            return false;
        }else if(true){
            return false;
        }
       
        conectar();
        String remove =""; 
        execute(remove);
        return true;
    }

    @Override
    String obterStrinConexao() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
    public Connection getConexao(){
        return this.conexao;
    }
    
    public static String converterDateParaDataBanco(Date data){
        if(data == null){
            return "NULL";
        }
        String str;
        Calendar calendario = Calendar.getInstance();
        calendario.setTime(data);
        int dia = calendario.get(Calendar.DATE);
        int mes = calendario.get(Calendar.MONTH)+1;
        int ano = calendario.get(Calendar.YEAR);
        str=dia+"."+mes+"."+ano;
        str="'"+str+"'";
        return str;        
    }
    
    public static String converterDataBancoParaDataPT_BR(String dataBanco){
        if(dataBanco==null){
            return null;
        }
        String data;
        String[] partes = dataBanco.split("-");
        if(partes.length<3){
            return null;
        }
        data=partes[2]+"/"+partes[1]+"/"+partes[0];
        
        return data;
        
    }

    public static String converterDateParaDataPT_BR(Date data){
        if(data == null){
            return "NULL";
        }
        String str;
        Calendar calendario = Calendar.getInstance();
        calendario.setTime(data);
        int dia = calendario.get(Calendar.DATE);
        int mes = calendario.get(Calendar.MONTH)+1;
        int ano = calendario.get(Calendar.YEAR);
        
        System.out.println("converterDateParaDataPT_BR >>> dia="+dia+", mes="+mes+", ano="+ano);
        if(dia<=9){
            str="0"+dia+"/";
        }else{
            str=dia+"/";
        }
        
        if(mes<=9){
            str+="0"+mes+"/";
        }else{
            str+=mes+"/";
        }
        
        str+=ano;
        return str;        
    }

    public static Date converterDataBancoParaDate(String data){
        if(data == null){
            return null;
        }
        
        String[] partes = data.split("-");
        if(partes.length<3){
            return null;
        }
        data=partes[2]+"/"+partes[1]+"/"+partes[0];
        
        int ano = Integer.parseInt(partes[0]);
        int mes = Integer.parseInt(partes[1]);
        int dia = Integer.parseInt(partes[2]);
        
        Calendar calendario = Calendar.getInstance();
        // O mês começa em 0 e vai até 11, por isso é necessário diminuir em 1 unidade
        mes-=1;
        calendario.set(ano, mes, dia);
        
        Date novoDate = calendario.getTime();
        
        return novoDate;
                
    }   
    
    public static Date fazerDate(int dia, int mes, int ano){
        // O mês começa em 0 e vai até 11, por isso é necessário diminuir em 1 unidade
        mes-=1;
        Calendar calendario = Calendar.getInstance();
        calendario.set(ano, mes, dia);
        
        Date novoDate = calendario.getTime();
        
        return novoDate;
    
    }
    
}
